﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SISIN.BE;
using SISIN.BL;
using System.Xml;
using System.Web.Services;
using System.Web.Script.Services;

namespace ChatWeb
{
    public partial class Chat : System.Web.UI.Page
    {
        UsuarioBL _usuario = new UsuarioBL();

        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        #region Propiedades

        private UsuarioBE UserLogued
        {
            get
            {
                object obj = Session["Usuario"];
                try
                {
                    if (obj == null)
                    {
                        obj = new UsuarioBE();
                    }
                }
                catch (Exception ex)
                {
                    Session["Usuario"] = null;
                }
                return (UsuarioBE)obj;
            }
            set { Session["Usuario"] = value; }
        }

        #endregion

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public static String ShowUsers()
        { 
            UsuarioBL _usuario = new UsuarioBL();
            List<UsuarioBE> usuarios = _usuario.GetUsersOnline();

            XmlDocument xmlDoc = new XmlDocument();
            XmlElement xmlElemen;

            xmlDoc.AppendChild(xmlDoc.CreateElement("usuarios"));
            foreach (UsuarioBE u in usuarios)
            {
                xmlElemen = xmlDoc.CreateElement("usuario");
                xmlElemen.SetAttribute("id", u.Id.ToString());
                xmlElemen.SetAttribute("user", u.Nickname);
                xmlDoc.DocumentElement.AppendChild(xmlElemen);
            }

            String nota = xmlDoc.OuterXml;
            return nota;
        }

        protected void btnChat_Click(object sender, EventArgs e)
        {
            ChatBL _chat = new ChatBL();
            Boolean AddMessage = _chat.AddMessage(UserLogued.Id, Convert.ToInt32(txtReceptorID.Value), txtChat.Text);

            if (AddMessage == true)
            {
                ObtenerConversacion();
            }
        }

        protected void TimerChat_Tick(object sender, EventArgs e)
        {
            ObtenerConversacion();
        }

        void ObtenerConversacion() {
            ChatBL _chat = new ChatBL();
            UsuarioBL _usuario = new UsuarioBL();
            String conversacion = "";

            if (txtReceptorID.Value != "")
            {
                List<ChatBE> lstConversacion = _chat.GetFromRecepetor(UserLogued.Id, Convert.ToInt32(txtReceptorID.Value));
                if (lstConversacion.Count > 0)
                {
                    for (int i = 0; i < lstConversacion.Count; i++)
                    {
                        UsuarioBE usu = _usuario.GetById(lstConversacion[i].Emisor.Id);
                        conversacion = conversacion + usu.Nickname +": "+ lstConversacion[i].Mensaje + System.Environment.NewLine;
                        CConversacion.Text = conversacion;
                    }
                }
            } 
        }

        protected void lnkAnalizar_Click(object sender, EventArgs e)
        {
            try
            {
                int receptor_id = Convert.ToInt32(txtReceptorID.Value);
                if (receptor_id != 0)
                    Response.Redirect("/Analizador.aspx?dest=" + receptor_id + "");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}